package mao.exaimnation.jd;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author Totoro
 * @date 2020/8/6
 * @explain:
 * 题目描述
 * 现有一个正整数，希望去掉这个数中的某一个数字之后可以得到一个回文素数。
 * 回文素数是指一个素数同时还是一个回文数（回文数即从左到右和从右到左均一样的数，例如12321）。
 * 【注意：一位数也被认为是回文数】输入两个正整数N和M，
 * 满足N<M，请编写一个程序统计N和M之间存在多少个满足上述要求的数？
 *
 * 输入描述
 * 单组输入。
 * 输入一行，包含两个正整数N 和M，1<=N<M<=1000000,两个数字之间用空格隔开。
 *
 * 输出描述
 * 输出在N和M之间（包含N和M）满足要求的数的个数。
 *
 * 样例输入：
 * 110 120
 * 样例输出
 * 10
 */
public class Main {
    //首先想到的是找到回文素数，然后再添加上一位，让其补充成原来的数字。
    // 首先将可能的回文素数保存起来，然后将范围内的数字，逐个遍历，逐位替换，有时候先完成
    //不要leetcode式的自作聪明，笔试的话先做出来吧。
    //后面着急，就直接写了逐个遍历，主要是思路不清，脑子不清楚。
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            int count = 0;
            int m=scanner.nextInt(),n=scanner.nextInt();
            for (int i = m; i <= n; i++) {
                int divisor = 10;
                int temp;
                //这样处理不好，应该整个字符串，然后逐个将其中字母剔除，然后再组合成int
                while( i/divisor > 0){
                    temp = (i/divisor)*(divisor/10)+i%(divisor/10);
                    if (huiwen(String.valueOf(temp)) && prime(temp))
                        count++;
                    divisor*=10;  //错在这里。忘记了。
                }
                temp = i%(divisor/10);
                if (huiwen(String.valueOf(temp)) && prime(temp))
                    count++;
            }
            System.out.println(count);

        }
    }

    public static boolean huiwen(String num){
        boolean resule = true;
        int len = num.length();
        for (int i = 0; i < num.length() / 2; i++) {
            if (num.charAt(i) != num.charAt(len-i-1)){
                return false;
            }
        }
        return true;
    }

    //判断素数。
    public static boolean prime(int num){
        boolean result = true;
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num%i == 0) return false;
        }
        return true;
    }
}
